package com.zeus.core.sender;

import com.zeus.common.enums.ZeusSenderTypeEnum;
import com.zeus.core.base.AbstractZeusSelfProtection;

/**
 * 宙斯钉钉发送助手
 *
 * @author f1ybear_wang  2022/2/22 11:53 上午
 */
public abstract class AbstractZeusSender extends AbstractZeusSelfProtection implements ZeusSender {

    abstract ZeusSenderTypeEnum senderType();

    abstract boolean sendMessage();

    @Override
    public ZeusSenderTypeEnum type() {
        return senderType();
    }

    /**
     * 发送消息
     *
     * @author f1ybear_wang  2022/2/22 12:20 下午
     */
    @Override
    public boolean send() {
        // 是否可以发送消息
        if (!isCanSendMessage(type())) {
            // 不可以直接标识成功
            return true;
        }

        // 发送消息
        boolean result = sendMessage();
        if (!result) {
            // 记录失败
            sendMessageFail(type());
        }
        return result;
    }

}
